// 闭包练习

// 计数器1
// var count=0;
// function add(){
//     return count+=1;
// }
// add();
// add();
// add();
// console.log(count);  //此时count=3


// 计数器2
// function add2(){
//     var count=0;
//     return count+=1;
// }
// console.log(add2());
// console.log(add2());
// console.log(add2());
// 一直都是1

// 闭包
var add3= (function(){
    var count=0;
    return function(){return count+=1};
})();
// 此时add3初始化了count=0;返回一个函数表达式（未调用）
// 自我调用只执行了一次，即是声明的时候
// console.log(count); //但因为count是在函数内容声明的，在函数外访问则报错。
console.log(add3());  //就是调用了add3的内部函数，而且在这个环境当中，count是存在的，而被初始化为0；此时打印结果为1
console.log(add3());  //打印结果为2，可以这样理解，第一次声明add3，对于add3内部的函数来说，add3所在的环境就是全局，此时count就是全局变量
console.log(add3()); //打印结果为3